﻿// Doc-Encode UTF8-BOM, Space(4), Unix(LF)
#include "man_appex/appex_nser.h"
#include "klbapp/klb_app_extension.h"
#include "klbmem/klb_mem.h"
#include "man_nser/man_nser.h"


namespace pfw {
//////////////////////////////////////////////////////////////////////////


#define PFWAPPEX_NSER       "PFWAPPEX-nser*"


typedef struct appex_nser_t_
{
    man_nser_t*             p_man;
}appex_nser_t;


//////////////////////////////////////////////////////////////////////////
// 内部函数 预定义




//////////////////////////////////////////////////////////////////////////
// 内部: 扩展接口函数


/// @brief 创建扩展
static void* appex_nser_create(klb_app_t* p_app)
{
    appex_nser_t* p_appex = KLB_MALLOCZ(appex_nser_t, 1, 0);

    p_appex->p_man = man_nser_create();

    return p_appex;
}

/// @brief 销毁扩展
static void appex_nser_destroy(void* ptr, klb_app_t* p_app)
{
    appex_nser_t* p_appex = (appex_nser_t*)ptr;

    KLB_FREE_BY(p_appex->p_man, man_nser_destroy);
    KLB_FREE(p_appex);
}

/// @brief 控制操作消息
/// @param [in]     *ptr            扩展的指针
/// @param [in]     *p_app          app对象
/// @param [in]     msg             消息事件: 详见 klb_app_extension_msg_e
/// @param [in,out] *p_param_in_out 消息参数
/// @param [in]     param_size      消息参数大小
/// @return int 0
/// @note 当框架需要扩展处理事务时调用
static int appex_nser_control(void* ptr, klb_app_t* p_app, int msg, uint8_t* p_param_in_out, int param_size)
{
    appex_nser_t* p_appex = (appex_nser_t*)ptr;

    return 0;
}

//////////////////////////////////////////////////////////////////////////
// 内部函数




//////////////////////////////////////////////////////////////////////////
// 扩展接口

man_nser_t* appex_nser_get_manage(appex_nser_t* p_appex)
{
    return p_appex->p_man;
}

//////////////////////////////////////////////////////////////////////////
// 注册 / 获取

/// @brief 获取 扩展
/// @return appex_nser_t*
appex_nser_t* appex_get_nser(klb_app_t* p_app)
{
    return (appex_nser_t*)klb_app_get_extension(p_app, PFWAPPEX_NSER);
}

appex_nser_t* appex_get_nser2()
{
    klb_app_t* p_app = klb_app_instance();
    return appex_get_nser(p_app);
}

int appex_register_nser(klb_app_t* p_app)
{
    klb_app_extension_t ex = { 0 };

    ex.cb_create = appex_nser_create;
    ex.cb_destroy = appex_nser_destroy;
    ex.cb_control = appex_nser_control;
    ex.cb_loop_once = NULL;
    ex.cb_get_ioctrl = NULL;

    klb_app_register_extension(p_app, PFWAPPEX_NSER, &ex);

    return 0;
}

//////////////////////////////////////////////////////////////////////////
} // namespace pfw

//end
